System Prompt 不是一坨文本
生产级的 System Prompt 不是想到什么写什么。它是分层管理的:身份层、环境层、工具层、行为层,各管各的,改一层不影响其他层。
常见的混乱写法
点击每层查看它负责什么
身份层
我是谁?性格、角色、基本人设
- 名字、角色定位
- 性格特征(友善 / 严谨 / 幽默…)
- 基本能力边界(能做什么、不能做什么)
环境层
现在什么情况?系统状态、用户上下文
- 用户基本信息(语言偏好、时区…)
- 当前操作系统、应用状态
- 会话上下文(在哪个页面、之前做了什么)
工具层
能用什么?可调用的工具和 API
- 工具名称和功能说明
- 参数格式
- 使用限制和注意事项
行为层
怎么行动?输出格式、决策规则
- 回答风格和格式要求
- 决策优先级(先做什么、后做什么)
- 安全护栏(什么不能做、什么要确认)
改一层不影响其他层
加个新工具?只改工具层。调整回答风格?只动行为层。不会牵一发而动全身。
多人协作不冲突
产品改行为、工程师加工具、运营调人设,各改各的文件,Git 合并不冲突。
A/B 测试更精准
想测试不同的回答策略?只替换行为层,其他三层保持不变,变量单一。
排查问题更容易
AI 行为异常?按层检查:是身份搞错了、环境信息过时、工具描述有误、还是规则冲突?
不用的东西别给 AI 看
如果你有 100 个工具,全部描述塞进 System Prompt,光工具描述就占几万 token。AI 和人一样:给太多信息反而找不到重点。
三步走:
① 首轮只给名字列表
System Prompt 里只放工具名 + 一句话说明,AI 知道有这个能力就行。
② 用到时再展开
AI 决定调用某个工具时,系统动态注入该工具的完整描述和参数格式。
③ 用完就收回
工具用完后,下一轮对话不再带完整描述,回到只有名字的状态。
Skill:可运营的 Prompt 模块
System Prompt 管我是谁,Tool 管我能做什么,那 Skill 管什么?它管的是遇到某件事,怎么一步一步做好。文件即配置,版本可追溯。
System Prompt
Tool
Skill
点击每个区块展开说明
content-creator.skill
System Prompt 是全局的,改了影响所有场景。Skill 是按需加载的,只在特定场景注入,不会污染其他任务的行为。而且 Skill 文件可以独立版本管理:谁改了什么、什么时候改的,一目了然。
提示词和缓存的微妙关系
KV Cache 的规则极其简单:前缀一模一样就命中,差一个字就全部重算。所以,往 System Prompt 里插入任何动态内容,都可能让缓存永远打不中。
每次请求,系统会对 System Prompt 算一个指纹(hash)
每一秒时间不同 → 指纹不同 → 缓存永远命不中 → 每次都要从头算 → 成本翻倍。
这不只是时间戳的问题:任何动态内容插在 System Prompt 里都有同样效果。
切换 Skill 时 System 变了 → 缓存失效
System 永远不变 → 前缀缓存始终命中
缓存命中模拟器
假设 10 次请求中有 3 次切换了不同的 Skill。观察两种注入方式的缓存差异: